package com.devTools;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* @Describe 反编译出来的代码里有很多Unicode码，又不知道中文是什么，每次阅读的时候都很麻烦，利用本工具可以将代码里的所有Unicode转成GBK中文编码
* 
* @Date 20180907
* @Author weiwei
*/

public class UnicodeToGBK {
	public static String ascii2native(String asciicode) {

		/**
		* 这里可以加上项目内的特殊校验情况如代码里有正则表达式校验等
		*
		*/

		if (!asciicode.contains("matches")) {
			if (!asciicode.contains("regexMap")) {
				String[] asciis = asciicode.split("\\\\u");
				String nativeValue = asciis[0];
				try {
					for (int i = 1; i < asciis.length; i++) {
						String code = asciis[i];
						nativeValue += (char) Integer.parseInt(code.substring(0, 4), 16);
						if (code.length() > 4) {
							nativeValue += code.substring(4, code.length());
						}
					}
				} catch (NumberFormatException e) {
					return asciicode;
				}
				return nativeValue;
			} else {
				return asciicode;
			}
		} else {
			return asciicode;
		}

	}

	/**
	 * @功能描述:获取当前文件夹内的所有PO文件
	 * 
	 */
	private List<File> getFileList(String path) {
		System.out.println(path);
		// 结果集
		List<File> fileList = new ArrayList();
		File file = new File(path);

		// 判断路径是否为文件夹
		if (file.isDirectory()) {
			// 判断是否存在
			if (file.exists()) {
				File[] files = file.listFiles();
				if (files.length == 0) {
					System.out.println("文件夹是空的!");
				} else {
					// 遍历文件夹
					for (File file2 : files) {
						if (file2.isDirectory()) {
							// 递归调用
							fileList.addAll(this.getFileList(file2.getAbsolutePath()));
						} else {
							if (!path.contains("com\\devTools")) {
								if (file2.getName().contains(".java"))
									fileList.add(file2);
							}

						}
					}
				}
			} else {
				System.out.println("文件夹不存在！");
			}
		} else {
			System.out.println("该路径不是文件夹!");
		}
		// 返回文件集合
		return fileList;
	}

	private void createFile(File file, String body) {
		try {
			// 创建文件输出流
			FileOutputStream o = new FileOutputStream(file);
			o.write(body.getBytes("UTF-8"));
			o.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		//指定文件夹路径
		String folder_path = "D:\\develop\\eclipse-workspace\\portal\\src\\com";

		UnicodeToGBK u = new UnicodeToGBK();
		List<File> rs = u.getFileList(folder_path);
		System.out.println(rs.size());
		List errList = new ArrayList();
		int a = 0;
		for (File f : rs) {
			StringBuffer sb = new StringBuffer();
			try {
				BufferedReader br = new BufferedReader(new FileReader(f));
				String text = null;
				while ((text = br.readLine()) != null) {
					sb.append(UnicodeToGBK.ascii2native(text)).append("\r\n");
				}
				u.createFile(f, sb.toString());
				System.out.println("success--");
				a++;
			} catch (Exception e) {
				System.out.println(a + "--" + f.getName() + "---errinfo-" + e.getMessage());
				errList.add(f.getName() + "-errinfo-" + e.getMessage());
			}
		}
		System.out.println(errList);
	}
}
